<?php
namespace Amis\dataviewer;

use Amis\Basics\AmisBasics;

/**
 * 通过表格的方式来展现数据，和 table 的不同之处：
 *
 * 数据源要求不同
 * table 的数据源需要是多行的数据，最典型的就是来自某个数据库的表
 * table view 的数据源可以来自各种固定的数据，比如单元格的某一列是来自某个变量
 * 功能不同
 * table 只能用来做数据表的展现
 * table view 除了展现复杂的报表，还能用来进行布局
 * 合并单元格方式不同
 * table 的合并单元格需要依赖数据
 * table view 的合并单元格是手动指定的，因此可以支持不规则的数据格式
 */
class TableView extends AmisBasics
{
    public string $type = 'table-view';

    /**
     * 宽度
     * @param string $whdth
     * @return $this
     */
    public function tableWidth(string $whdth = '100%')
    {
        $this->width = $whdth;
        return $this;
    }

    /**
     * 表格标题
     * @param string $caption
     * @return $this
     */
    public function tableCaption(string $caption = '标题')
    {
        $this->$caption = $caption;
        return $this;
    }

    /**
     * 单元格默认内间距
     * @param string $padding
     * @return $this
     */
    public function tablePadding(string $padding = 'var(--TableCell-paddingY) var(--TableCell-paddingX)%')
    {
        $this->padding = $padding;
        return $this;
    }

    /**
     * 是否显示边框
     * @param bool $border
     * @return $this
     */
    public function tableBorder(bool $border = true)
    {
        $this->border = $border;
        return $this;
    }

    /**
     * 边框颜色
     * @param string $borderColor
     * @return $this
     */
    public function tableBorderColor(string $borderColor = 'var(--borderColor)')
    {
        $this->borderColor = $borderColor;
        return $this;
    }

    /**
     * 行设置
     * @param array $trs
     * @return $this
     */
    public function trs(...$trs)
    {
        $this->set(__FUNCTION__,...$trs);
        return $this;
    }

    /**
     * 高度
     * @param string $height
     * @return $this
     */
    public function trsHeight(string $height)
    {
        $this->height = $height;
        return $this;
    }

    /**
     * 行背景色
     * @param string $background
     * @return $this
     */
    public function trsBackground(string $background)
    {
        $this->background = $background;
        return $this;
    }

    /**
     * 单元格设置
     * @param ...$tds
     * @return $this
     */
    public function tds(...$tds)
    {
        $this->set(__FUNCTION__,...$tds);
        return $this;
    }

    /**
     * 单元格背景色
     * @param string $background
     * @return $this
     */
    public function tdsBackground(string $background)
    {
        $this->background = $background;
        return $this;
    }

    /**
     * 单元格文字颜色
     * @param string $color
     * @return $this
     */
    public function tdsColor(string $color)
    {
        $this->color = $color;
        return $this;
    }

    /**
     * 单元格文字是否加粗
     * @param bool $bold
     * @return $this
     */
    public function tdsBold(bool $bold = false)
    {
        $this->bold = $bold;
        return $this;
    }

    /**
     * 单元格宽度，只需要设置第一行
     * @param string $width
     * @return $this
     */
    public function tdsWidth(string $width)
    {
        $this->width = $width;
        return $this;
    }

    /**
     * 单元格内间距
     * 默认集成表格的设置
     * @param string $padding
     * @return $this
     */
    public function tdsPadding(string $padding)
    {
        $this->padding = $padding;
        return $this;
    }

    /**
     * 单元格内的水平对齐，可以是 left、center、right
     * @param string $align
     * @return $this
     */
    public function tdsAlign(string $align = 'left')
    {
        $this->align = $align == 'left' ? 'left' : ($align == 'right' ? 'right' : 'center');
        return $this;
    }

    /**
     * 单元格内的垂直对齐，可以是 top、middle、bottom、baseline
     * @param string $valign
     * @return $this
     */
    public function tdsValign(string $valign = 'middle')
    {
        if (in_array($valign, ['top', 'middle', 'bottom', 'baseline']))
            $this->valign = $valign;
        return $this;
    }

    /**
     * 单元格水平跨几行
     * @param int $colspan
     * @return $this
     */
    public function tdsColspan(int $colspan)
    {
        $this->colspan = $colspan;
        return $this;
    }

    /**
     * 单元格垂直跨几列
     * @param int $rowspan
     * @return $this
     */
    public function tdsRowspan(int $rowspan)
    {
        $this->rowspan = $rowspan;
        return $this;
    }

    /**
     * 其它 amis 设置
     * @param array $body
     * @return $this
     */
    public function tdsBody(... $body)
    {
        $this->set(__FUNCTION__,...$body);
        return $this;
    }

    /**
     * 这是个跨几列的设置项
     * @param int $body
     * @return $this
     */
    public function rowsSpan(int $body)
    {
        $this->body = $body;
        return $this;
    }

    /**
     * 列样式
     * @param array $style
     * @return $this
     */
    public function rowsStyle(array $style)
    {
        $this->style = $style;
        return $this;
    }
}